import threading
import tushare as ts
from sqlalchemy import create_engine
import logging
from BakDailyData import update_current_data_bak_daily
from DailyBasicData import update_current_data_daily_basic
from FIllBasic import insert_history_data_stock
from IndexBasicData import insert_history_data_index_basic
from IndexDailybasicData import update_current_data_index_daily_basic
from NewShareData import update_current_data_new_share
from ShiborData import update_current_data_shibor
# from ShiborLprData import update_current_data_shibor_lpr
from StockCompanyData import insert_history_data_stock_company
from TradeCalData import insert_current_trade_cal
from CnCpiData import save_history_data_cn_cpi
from CnPpiData import save_history_data_cn_ppi
from CnmData import save_history_data_cn_m
from UsTycrData import update_current_data_us_tycr

from FundHoldingsData import update_current_data_fund_holdings
from GetReportData import update_current_data_report_date
from GetProfitData import update_current_data_profit_date
from GetOperationData import update_current_data_operation_date
from GetGrowthData import update_current_data_growth_date
from GetDebtpayingData import update_current_data_debtpaying_date
from GetCashflowData import update_current_data_cashflow_date
import constant

"""
适合时间段内，不含其他必需条件
"""
# 日志
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('Start of program')
# 初始化数据库连接:
engine = create_engine(
    constant.get_db_path(),
    max_overflow=0,   # 超过连接池大小外最多创建的连接数
    pool_size=5,      # 连接池大小
    pool_timeout=30,  # 连接池中没有线程最多等待时间，否则报错
    pool_recycle=-1,  # 多久之后对连接池中的连接进行回收（重置）-1不回收
)

pro = ts.pro_api(constant.get_pro_token())


'''
更新各类数据定时器
'''
def fun_timer():
    logging.debug('------------------- 定时器启动 -------------------')
    insert_history_data_stock(engine, pro) # 查询并更新股票基础数据
    logging.debug('------------------- 查询并更新股票基础数据完成 -------------------')
    update_current_data_bak_daily(engine, pro) # 查询并更新备用行情数据
    logging.debug('------------------- 查询并更新备用行情数据完成 -------------------')
    update_current_data_daily_basic(engine, pro) # 查询并更新每日行情数据
    logging.debug('------------------- 查询并更新每日行情数据完成 -------------------')
    insert_history_data_index_basic(engine, pro) # 查询并更新指数基本信息
    logging.debug('------------------- 查询并更新指数基本信息完成 -------------------')
    update_current_data_index_daily_basic(engine, pro) # 查询并更新大盘指数每日指标
    logging.debug('------------------- 查询并更新大盘指数每日指标完成 -------------------')
    update_current_data_new_share(engine, pro) # 查询并更新IPO新股数据
    logging.debug('------------------- 查询并更新IPO新股数据完成 -------------------')
    update_current_data_shibor(engine, pro) # 查询并更新shibor利率数据
    logging.debug('------------------- 查询并更新shibor利率数据完成 -------------------')
    insert_history_data_stock_company(engine, pro) # 查询并更新上市公司数据
    logging.debug('------------------- 查询并更新上市公司数据完成 -------------------')
    insert_current_trade_cal(engine, pro) # 查询并更新当年交易日信息
    logging.debug('------------------- 查询并更新当年交易日信息完成 -------------------')
    save_history_data_cn_cpi(engine, pro) # 查询并更新居民消费价格指数
    logging.debug('------------------- 查询并更新居民消费价格指数完成 -------------------')
    save_history_data_cn_ppi(engine, pro) # 查询并更新工业生产者出厂价格指数
    logging.debug('------------------- 查询并更新工业生产者出厂价格指数完成 -------------------')
    save_history_data_cn_m(engine, pro) # 查询并更新货币供应量
    logging.debug('------------------- 查询并更新货币供应量完成 -------------------')
    update_current_data_us_tycr(engine, pro) # 查询并更新美国债收益率曲线利率
    logging.debug('------------------- 查询并更新美国债收益率曲线利率完成 -------------------')
    """
    调用ts老接口，可能随时会作废
    """
    update_current_data_fund_holdings(engine, ts) # 查询并更新每个季度基金持有上市公司股票的数据
    logging.debug('------------------- 查询并更新每个季度基金持有上市公司股票的数据完成 -------------------')
    update_current_data_report_date(engine, ts) # 查询并更新按年度、季度获取业绩报表数据
    logging.debug('------------------- 查询并更新按年度、季度获取业绩报表数据完成 -------------------')
    update_current_data_profit_date(engine, ts) # 查询并更新盈利能力数据
    logging.debug('------------------- 查询并更新盈利能力数据完成 -------------------')
    update_current_data_operation_date(engine, ts) # 查询并更新营运能力数据
    logging.debug('------------------- 查询并更新营运能力数据完成 -------------------')
    update_current_data_debtpaying_date(engine, ts) # 查询并更新偿债能力数据
    logging.debug('------------------- 查询并更新偿债能力数据完成 -------------------')
    update_current_data_growth_date(engine, ts) # 查询并更新成长能力数据
    logging.debug('------------------- 查询并更新成长能力数据完成 -------------------')
    update_current_data_cashflow_date(engine, ts) # 查询并更新现金流量数据
    logging.debug('------------------- 查询并更新现金流量数据完成 -------------------')


    global timer
    timer = threading.Timer(86400, fun_timer)
    timer.start()




timer = threading.Timer(1, fun_timer)
timer.start()